package contable.dominio;

import java.util.Date;

/**
 *
 * @author suncin
 */
public class Empleado {

    private String nombres;
    private String apellidos;
    private Date fechaNac;
    private char sexo;
    private String dui;
    private String nit;
    private String isss;
    private String nup;
    private int cargo;
    private double sueldo;

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        if (apellidos == null || apellidos.isEmpty()) {
            throw new IllegalArgumentException("Los apellidos no se pueden dejar vacios");
        } else if (apellidos.length() > 60) {
            throw new IllegalArgumentException("Los apellidos no pueden tener mas de 60 caracteres");
        } else {
            this.apellidos = apellidos;
        }
    }

    public int getCargo() {
        return cargo;
    }

    public void setCargo(int cargo) {
        this.cargo = cargo;
    }

    public String getDUI() {
        return dui;
    }

    public void setDUI(String dui) {
        if (dui == null || dui.isEmpty()) {
            throw new IllegalArgumentException("El DUI nos se puede dejar vacio");
        } else if (!dui.matches("\\d{8}-\\d")) {
            throw new IllegalArgumentException("El DUI debe tener el siguiente formato ########-#");
        } else {
            this.dui = dui;
        }
    }

    public Date getFechaNacimiento() {
        return fechaNac;
    }

    public void setFechaNacimiento(Date fechaNac) {
        if (fechaNac == null) {
            throw new IllegalArgumentException("La fecha de nacimiento no se puede dejar vacia");
        } else if (fechaNac.after(new Date())) {
            throw new IllegalArgumentException("La fecha de nacimiento no pude ser posterior a la fecha actual " + new Date());
        } else {
            this.fechaNac = fechaNac;
        }
    }

    public String getISSS() {
        return isss;
    }

    public void setISSS(String isss) {
        if (isss == null || isss.isEmpty()) {
            throw new IllegalArgumentException("El ISSS no se puede dejar vacio");
        } else if (!isss.matches("\\d{9}")) {
            throw new IllegalArgumentException("El ISSS debe tener el siguiente formato #########");
        } else {
            this.isss = isss;
        }
    }

    public String getNIT() {
        return nit;
    }

    public void setNIT(String nit) {
        if (nit == null || nit.isEmpty()) {
            throw new IllegalArgumentException("El NIT no se puede dejar vacio");
        } else if (!nit.matches("\\d{4}-\\d{6}-\\d{3}-\\d")) {
            throw new IllegalArgumentException("El NIT debe tener el siguiente formato ####-######-###-#");
        } else {
            this.nit = nit;
        }
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        if (nombres == null || nombres.isEmpty()) {
            throw new IllegalArgumentException("Los nombres no se pueden dejar vacios");
        } else if (nombres.length() > 60) {
            throw new IllegalArgumentException("Los nombres no pueden tener mas de 60 caracteres");
        } else {
            this.nombres = nombres;
        }
    }

    public String getNUP() {
        return nup;
    }

    public void setNUP(String nup) {
        if (nup == null || nup.isEmpty()) {
            throw new IllegalArgumentException("El NUP no se puede dejar vacio");
        } else if (!nup.matches("\\d{12}")) {
            throw new IllegalArgumentException("El NUP debe tener el siguiente formato ############");
        } else {
            this.nup = nup;
        }
    }

    public char getSexo() {
        return sexo;
    }

    public void setSexo(char sexo) {
        if (sexo != 'F' && sexo != 'M') {
            throw new IllegalArgumentException("El sexo solo puede ser femenino (F) o masculino (M)");
        } else {
            this.sexo = sexo;
        }
    }

    public double getSueldo() {
        return sueldo;
    }

    public void setSueldo(double sueldo) {
        if (sueldo < 0) {
            throw new IllegalArgumentException("El sueldo debe ser mayor que cero");
        } else {
            this.sueldo = sueldo;
        }
    }

    public int getEdad() {
        Date actual = new Date();
//        int anhos = actual.getYear() - fechaNac.getYear();
//        int meses = actual.getMonth() - fechaNac.getMonth();
//        int dias = actual.getDay() - fechaNac.getDay();
//        if (meses < 0 || meses == 0 && dias > 0) {
//            anhos--;
//        }
//        return anhos;
        return (int) ((actual.getTime() - fechaNac.getTime()) / 3.156e10);
    }

    @Override
    public String toString() {
        String s = (sexo == 'M') ? "Masculino" : "Femenino";
        return "\nNombres: " + nombres + "\nApellidos: " + apellidos + "\nFecha Nacimiento: " + fechaNac + "\nSexo: " + s + "\nDUI: " + dui + "\nNIT: " + nit + "\nISSS: " + isss + "\nNUP: " + nup + "\nCargo: " + cargo + "\nSueldo: $ " + sueldo;
    }
}
